#ifndef		_RT_FS16_H_
#define		_RT_FS16_H_

typedef struct
{
	FS_FILE*    (*fopen)		(const char* path, const char* mode);
	int         (*fclose)		(FS_FILE* stream);
	size_t      (*fread)		(void* ptr, size_t size, size_t n, FS_FILE* stream);
	size_t      (*fwrite)		(const void* ptr, size_t size, size_t n, FS_FILE* stream);
	long        (*fseek)		(FS_FILE* stream, long offset, int whence);
	long        (*ftell)		(FS_FILE* stream);
	int         (*feof)			(FS_FILE* stream);
	int         (*ferror)		(FS_FILE* stream);
	void        (*clearerr)		(FS_FILE* stream);
	int         (*remove)		(const char* path);
	int         (*rename)		(const char* oldname, const char* newname);
	int         (*chdir)		(const char* path);
	int         (*mkdir)		(const char* path);
	int         (*rmdir)		(const char* path);
	int         (*getfn)		(const char* path, unsigned long* num);
	int         (*findfirst)	(const char* path, unsigned attrib, struct ffblk* ffblk);
	int         (*findnext)		(struct ffblk* ffblk);
	int         (*findclose)	(struct ffblk* ffblk);
	int         (*get_free)		(unsigned char drv, struct diskfree_t* pdf);
	char*		(*getcwd)		(char* buffer, int maxlen);
	int			(*getcwd2)		(char* buffer, int maxlen);

	int			(*stat)			(char* name, struct _stat* buffer);

	int			(*init)			(void);
	int			(*format)		(const char* label, int (*callback)(int percent));
	int			(*refresh_cache)(void);

	int			(*read_cluster)	(int drive, unsigned short cluster, unsigned long sector_cnt, void* buf);
	size_t		(*abs_read)	(void* buf, unsigned long offset, unsigned long length, FS_FILE* stream);

	int			(*access)		(const char* pathname, int mode);
	int			(*update)		(FS_FILE* stream);
	int			(*flush_cache)	(void);
} T_FS_RelocationTable;

#endif		// _RT_FS16_H_
